在 Line Bot 的撰寫上,搞清楚訊息很重要,清楚之後才能利用或是拿取到想要的資訊,因此在開始撰寫機器人之前要先了解 Line 裡面訊息的樣式、屬性以及提取方式。
這篇我們會複習以前的訊息類型,並講一下 Line 訊息的通用屬性,以便深入了解 Line 訊息讓未來使用上更得心應手。
Common properties(通用屬性)
通用屬性也就是每一則訊息不論格式都有的屬性,總共有六種:type、mode、timestamp、source、webhookEventId、deliveryContext.isRedelivery。
type(事件類型)
資料型態:String
前兩項的訊息會很常用的,可以先記得~
-
message(接收訊息)
-
postback (回傳訊息)
- unsend( 訊息無法傳送)
- follow(被加好友)
- unfollow(被封鎖)
- join(Line Bot 加入群組或聊天室)
- leave(Line Bot 離開群組或聊天室)
- memberJoined(用戶加入群組或聊天室)
- memberLeft(用戶離開群組或聊天室)
- beacon(當用戶進入 Line Beacon 區域)
- ...
mode(訊息狀態)
資料型態:String
- active:頻道處於活動狀態,Line Bot 可以正常發送訊息。
- standby:頻道處於等待狀態,Line Bot 不能回覆訊息。
timestamp(事件發生的時間,以毫秒計)
資料型態:Number
source(事件來源)
資料型態:Object
- user
- group chat
- multi-person chat
|
type |
userId |
groupId |
roomId |
| user |
User |
使用者代碼 |
無 |
無 |
| group chat |
group |
使用者代碼,只包含在 Message event 中 |
群組代碼 |
無 |
| multi-person chat |
room |
使用者代碼,只包含在 Message event 中 |
無 |
聊天室代碼 |
webhookEventId(Webhook 被觸發時產生的事件代碼)
資料型態:String
deliveryContext.isRedelivery(Webhook 再次傳遞與否)
資料型態:Boolean
- true: 再次傳送 Webhook 事件
- false: 第一次 Webhook 事件成功傳遞
Message event
- type(類型):message
- replyToken(訊息回應使用的 Token)
- message(訊息物件) [DAY 8] 有介紹
- Text
- Image
- Video
- Audio
- File
- Location
- Sticker
Text
當有文字訊息發出時會出現以下屬性資料。
- id:訊息ID
- type:text
-
text:訊息中包含的文字
- 假設訊息最後為表情貼,則會以表情貼的文字儲存在此,例如:(love);如果是 @somebody ,則會儲存 @somebody ,例如:@毛毛 ,但是並不能儲存 @all 指命。
-
events[0].message.text:獲取第一則訊息的文字內容。
為甚麼可以這樣拿取呢,這就要從 Line 訊息包裝的 json 來看了。從底下的文件可以看到, text 位在 "events" 下 "message" 裡的 "text" ,因此可以透過此語法獲取資料(以下訊息拿取方式以次類推)。
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "325708",
"type": "text",
"text": "@example Hello, world! (love)",
"emojis": [
{
"index": 23,
"length": 6,
"productId": "5ac1bfd5040ab15980c9b435",
"emojiId": "001"
}
],
"mention": {
"mentionees": [
{
"index": 0,
"length": 8,
"userId": "U850014438e..."
}
]
}
}
}
]
}
- emojis:當有使用一個以上的表情貼時就會出現。
- mention:當 @somebody 時才會出現。
Image
- id:訊息ID
- type:image
- contentProvider.type:誰提供照片
- line
- external:透過程式發送( liff 設定)
- contentProvider.originalContentUrl:照片的連結。
當照片是程式發送時才有。
- contentProvider.previewImageUrl:圖片預覽連結。
- imageSet.id:圖片包的ID。
- imageSet.index:在照片包的第幾個,從 1 開始。
- imageSet.total:照片包裡的照片總數。
Video
- id:訊息ID
- type:vedio
- duration:影片長度(毫秒)。
- contentProvider.type:提供者
- contentProvider.originalContentUrl:影片連結。
- contentProvider.previewImageUrl:影片預覽連結。
Audio
- id:訊息ID
- type:Audio
- duration:影片長度(毫秒)。
- contentProvider.type:提供者。
- contentProvider.originalContentUrl:音檔連結。
File
- id:使訊息ID
- type::file
- fileName:檔案名稱。
- fileSize:檔案大小(bytes)。
Location
- id:訊息ID
- type:location
- title:地點名稱。
- address:地址。
- latitude:緯度。
- longitude:經度。
Sticker
- id:訊息ID
- type:sticker
- packageId:貼圖包ID。
- stickerId:貼圖ID。
- stickerResourceType
- STATIC: 靜態貼圖
- ANIMATION: 動態貼圖
- SOUND: 有聲音的靜態貼圖
- ANIMATION_SOUND: 有聲音的動態貼圖
- POPUP: 全螢幕貼圖或特效貼圖
- POPUP_SOUND: 有聲音的全螢幕貼圖或特效貼圖
- CUSTOM: 使用者可以輸入文字的貼圖
- ...
資料來源:官方文件
接下來下一篇會來介紹 Postback event,並做簡單範例喔(❛◡❛✿)!